package com.hbase.common.utils;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * Json对象装换工具
 * 
 * @date: 2016年5月26日
 * @author xieyang
 */
public class GsonUtils {

    /**
     * key 分隔符
     */
    private static String KEY_SPLIT_FLAG = ".";

    /**
     * Gson实例
     * disableHtmlEscaping 去掉转成json字符串时进行特殊字符的格式化操作
     */
    private static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").disableHtmlEscaping().create();

    private static Gson format = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").setPrettyPrinting().disableHtmlEscaping().create();

    private static Gson hasNull = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").serializeNulls().disableHtmlEscaping().create();

    
    /**
     * TODO 将为null值的字段也返回
     * 
     * @author zhanghan
     * @date 2017年3月22日
     * @return
     */
    public static String parseBeanToJsonHasNull(Object object) {
        return hasNull.toJson(object);
    }

    /**
     * 
     @Desecration
     * @return String
     * @author xieyang
     * @date 2016年5月26日
     */
    public static String parseBeanToJson(Object object) {
        return gson.toJson(object);
    }

    /**
     * TODO 格式化json
     * 
     * @author zhanghan
     * @date 2016-11-28
     */
    public static String parseBeanToFormatJson(Object object) {
        return format.toJson(object);
    }

    /**
     * 将json串转换成java对象
     * 
     * @param <T>
     * @param classes
     * @param json
     * @return
     */
    public static <T> T parseJsonToBean(Class<T> classes, String json) {
        T t = gson.fromJson(json, classes);
        return t;
    }

    /**
     * 将json串转换成java对象
     * 
     * @param Type
     * @param json
     * @return
     */
    public static <T> T fromJson(String str, Type type) {
        T t = gson.fromJson(str, type);
        return t;
    }

    /**
     * 判断String是否是空 为空的情况包含：对象为空,为空字符串（""）,为字符串"null"
     * 
     * @param value
     * @return
     */
    public static boolean isBlank(String value) {
        if (value == null || "".equals(value.trim()) || "null".equals(value.trim())) {
            return true;
        }
        return false;
    }
}
